import logging
from contextlib import asynccontextmanager

from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware
from tortoise.contrib.fastapi import register_tortoise

from apps.employee.models import Dept
from settings import TORTOISE_ORM
from apps.employee.deptApp import deptRouter
from apps.employee.empApp import empRouter

# 设置日志
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)

# 初始化数据
async def init_dept_data():
    # 检查数据表中是否有数据
    dept_count = await Dept.all().count()
    logger.info(f'当前用户数量{dept_count}')
    if dept_count == 0:
        # 添加测试数据
        test_datas = [
            {'id':1,'name':'后勤部','local':'行政楼201'},
            {'id': 2, 'name': '市场部', 'local': '行政楼202'},
            {'id': 3, 'name': '教学部', 'local': '行政楼203'},
            {'id': 4, 'name': '研发部', 'local': '行政楼204'}
        ]

        for data in test_datas:
            await Dept.create(**data)
        logger.info(f'测试数据已经添加')
    else:
        logger.info(f'数据库中已经存在数据，无需初始化')



# 使用上下文管理器
@asynccontextmanager
async def init_app(app: FastAPI):
    logger.info('应用启动中......')
    await init_dept_data() # 初始化数据
    yield
    logger.info('应用关闭......')

app = FastAPI(title='学生管理系统', lifespan=init_app)

# 添加数据库管理的配置
register_tortoise(
    app=app,
    config= TORTOISE_ORM,
)


# 添加CORS中间件
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 在生产环境中应该指定具体的域名
    allow_credentials=True, # 是否认证
    allow_methods=["*"],
    allow_headers=["*"],
)

app.include_router(deptRouter,prefix='/dept',tags=['部门管理APP'])
app.include_router(empRouter,prefix='/emp',tags=['员工管理APP'])